package leetcode.editor.cn;

//Java：长度最小的子数组
public class MinimumSizeSubarraySum {
    public static void main(String[] args) {
        Solution solution = new MinimumSizeSubarraySum().new Solution();
        // TO TEST
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        /**
         * 在本题中实现滑动窗口，主要确定如下三点：
         * <p>
         * 窗口内是什么？
         * 如何移动窗口的起始位置？
         * 如何移动窗口的结束位置？
         * <p>
         * 窗口就是 满足其和 ≥ s 的长度最小的 连续 子数组。
         * 窗口的起始位置如何移动：如果当前窗口的值大于s了，窗口就要向前移动了（也就是该缩小了）。
         * 窗口的结束位置如何移动：窗口的结束位置就是遍历数组的指针，也就是for循环里的索引。
         *
         * @param target 目标值
         * @param nums   数组
         * @return int 结果
         */
        public int minSubArrayLen(int target, int[] nums) {
            int left = 0, sum = 0;
            int result = Integer.MAX_VALUE;
            for (int right = 0; right < nums.length; right++) {
                sum += nums[right];
                while (sum >= target) {
                    result = Math.min(result, right - left + 1);
                    sum -= nums[left++];
                }
            }
            return result == Integer.MAX_VALUE ? 0 : result;
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}